package com.atguigu.exercise;

/**
 *
 *      4. 对象数组题目：
 *      定义类Student1，包含三个属性：学号number(int)，年级state(int)，成绩
 *      score(int)。 创建20个学生对象，学号为1到20，年级和成绩都由随机数确定。
 *      问题一：打印出3年级(state值为3）的学生信息。
 *      问题二：使用冒泡排序按学生成绩排序，并遍历所有学生信息
 *      提示：
 *      1) 生成随机数：Math.random()，返回值类型double;
 *              [10,99]
 *              公式：(int) (Math.random() * (99 -10 + 1) + 10)
 *      2) 四舍五入取整：Math.round(double d)，返回值类型long。
 *
 *      此代码是对Student1Test.java的改进，将操作数组的功能封装到方法中
 *
 * @author : leimingchao
 * @date Date : 2021年08月15日 21:24
 */
public class StudentTest1 {

    public static void main(String[] args) {
        //声明一个Student1类型数组
        Student1[] students = new Student1[20];
        for (int i = 0; i < students.length; i++) {
            //给数组元素赋值
            students[i] = new Student1();
            //给Student1对象的属性赋值
            students[i].number = i + 1;
            //年级：[1,6]
            students[i].state = (int)(Math.random() * (6 - 1 + 1) + 1);
            //成绩 [0,100]
            students[i].score = (int)(Math.random() * (100 - 0 + 1));
        }
        StudentTest1 test = new StudentTest1();
        //遍历学生数组
        test.print(students);
        System.out.println("****************************************");
        //问题一：打印出3年级(state值为3）的学生信息。
        test.searchState(students, 3);
        System.out.println("****************************************");
        //问题二：使用冒泡排序按学生成绩排序，并遍历所有学生信息
        test.sort(students);
        test.print(students);
    }

    /**
     * 遍历Student1[] 数组的操作
     */
    public void print(Student1[] students) {
        for (int i = 0; i < students.length; i++) {
            System.out.println(students[i].info());
        }
    }

    /**
     * 查找Student1数组中指定年级的学生信息
     * @param students
     * @param state
     */
    public void searchState(Student1[] students,int state) {
        for (int i = 0; i < students.length; i++) {
            if (state == students[i].state) {
                System.out.println(students[i].info());
            }
        }
    }

    /**
     * 给Student1数组排序
     * @param students
     */
    public void sort(Student1[] students) {
        for (int i = 0; i < students.length - 1; i++) {
            for (int j = 0; j < students.length - i - 1; j++) {
                if (students[j].score > students[j + 1].score) {
                    //如果需要换序，交换的是数组的元素：Student1对象！！！
                    Student1 temp =students[j];
                    students[j] = students[j + 1];
                    students[j + 1] = temp;
                }
            }
        }
    }

}

class Student1 {

    /**
     * 学号
     */
    int number;
    /**
     * 年级
     */
    int state;

    /**
     * 成绩
     */
    int score;

    /**
     * 显示学生信息的方法
     * @return
     */
    public String info() {
        return "学号：" + number + ",年级：" + state + ",成绩：" + score;
    }
}
